<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
</head>
<body>
	<script type="text/javascript">
		/*
			js有两大数据类型 
				1.基本数据类型(一般存在栈内存中):Number, String,Boolean,Undefined,null,symbol
				①Number:数字类型，js不区分整型和浮点型,包含所有数字
						Infinity 正无穷大 
						NaN 表示不是一个数字 
				②String:字符串类型,被单引号或者双引号包裹住的就是字符串
						变量.length 获取字符串的长度
				③Boolean:布尔类型 true false   主要用在逻辑判断上
				④Undefined:未定义
					-声明变量没赋值，他的值就是undefined
					-该类型只有一个值，undefined
				⑤null: 空类型 是一个空的指针对象，表示用来保存值的，但是还没真正保存
						返回的是object类型
				⑥symbol:独一无二的值



				2.复杂数据类型(一般存在堆内存中):
				object 对象
				array 数组
				function 函数

				typeof:用来判断变量的数据类型

				栈内存和堆内存的优缺点：
				在js中
				基本数据类型 变量大小是固定的，并且操作简单，放到栈内存中存储（先进后出）
				复杂数据类型 大小不固定，放到堆里，他们会根据自己的内存大小分配空间

				复杂数据类型 值 保存在堆内存中，栈内存里存的是一个指针地址，这个指针指向内存中的一个位置，这个位置就是保存【值】的地方

				栈内存的系统效率比较高
				堆内存需要分配空间和地址，还需要将地址存到栈上，效率低于栈
		*/
		let n1 = 10;
		let n2 = 10.9;
		let n3 = -10;
		let n4 = Infinity;
		let n5 = -Infinity;
		let n6 = NaN;
		let n7 = 6e3//6乘10的3次方
		console.log("n1的数据类型",typeof n1)//number
		console.log("n2的数据类型",typeof n2)//number
		console.log("n3的数据类型",typeof n3)//number
		console.log("n4的数据类型",typeof n4)//number
		console.log("n5的数据类型",typeof n5)//number
		console.log("n6的数据类型",typeof n6)//number
		console.log("n7的数据类型",typeof n7)//number 6000
		// 在js中进行精度比较高的运算时----数据精度的问题
		// 比如：0.1+0.2 计算机底层用的是二进制计算，会导致个别出现很多小数的情况，需要特殊处理
		let a = 0.1;
		let b = 0.2;
		console.log(a + b)// 0.30000000000004
		console.log("=========================================")

		// string
		let s1 = "     "
		let s2 = "12"
		let s3 = ""
		console.log("s1的数据类型是",typeof s1, s1.lenght)//string
		console.log("s2的数据类型是",typeof s2, s2.lenght)
		console.log("s3的数据类型是",typeof s3, s3.lenght)

		let s4 = 1 + "1" //如果运算中有字符串，并且用+连接，发生的是字符串的拼接
		console.log("s4的数据类型是",typeof s4, s4.lenght)// 11
		console.log("======================================")

		// Boolean
		let b1 = true
		console.log("b1的数据类型",typeof b1)
		let b2 = 1 > 2
		console.log(b2)
		console.log("=========================================")

		// undefined
		let u1;
		console.log(typeof u1)
		console.log("=========================================")

		// null
		let nu = null
		console.log(typeof nu)//object
		console.log("=========================================")

		//object
		let obj = {
			//属性名；属性值
			name: "张三"
			age: 18
		}
		console.log(obj.name)//张三
		console.log(typeof obj)//object

		//Array
		let arr = [1, true, undefined, "hello", null, { name:"李氏"}]
		let arr2 = arr
		console.log(typeof arr)
		// Array.isArray判断是不是一个数组 是为true 不是false
		console.log(Array.isArray(arr))//true
		//根据下表取值 从0开始
		console.log(arr[0])//1
		arr2[0] = 10
		console.log(arr2, arr)
	</script>
</body>
</html>